import logging


logger = logging.getLogger()


class ElasticSearchQuerier(object):

    def __init__(self, es, index, doc_type):
        self.es = es
        self.index = index
        self.doc_type = doc_type

    def search(self, args):
        query, param_search, param_result = self._build_query(args)
        logger.debug('class=%s, index=%s, doc_type=%s, query=%s' %
                     (self.__class__.__name__, self.index, self.doc_type, query))
        es_res = self.es.search(index=self.index, doc_type=self.doc_type, body=query, params=param_search)
        return self._build_result(es_res, param_result)

    def _build_query(self, args):
        """
        创建es搜索语句。
        返回tuple：
        第一个元素为query
        第二个元素为es.search时用的param_search，需要dict
        第三个元素为_buildResult用的param_result，需要dict
        """
        raise NotImplementedError()

    def _build_result(self, es_result, param):
        """
        处理原始搜索结果，返回dict
        """
        raise NotImplementedError()
